package gamecomponents.levelcomponents.stagelements;
import gamecomponents.levelcomponents.stagelements.buildingmats.ExtendedEntity;
import gamecomponents.levelcomponents.stagelements.buildingmats.Door;
import gamecomponents.levelcomponents.stagelements.blockhelper.Interval;
import gamecomponents.navigation.Coordinate;
import gamecomponents.navigation.Direction;
import gamecomponents.navigation.Location;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Map;
import java.util.SortedSet;

/**
 * @author Akos
 * @version 1.0
 * @created 14-márc.-2012 16:36:10
 */
public class Block {

	private static final Coordinate MAX_COORDINATE = new Coordinate(100000,1000000);
	/**
	 * A Block-ok tárolják minden irányban a szomszédos Block-ok referenciáit.
	 */
	private Map<Direction, Block> neighbours;
	/**
	 * Az adott határokat tároljuk.
	 */
	private Map<Direction, SortedSet<Interval>> sideIntervals;
	private boolean isEmpty;
	private ArrayList<ExtendedEntity> extendedEntities;
	private Door door;

	public Block(){

	}

	public void finalize() throws Throwable {

	}

	/**
	 * 
	 * @param bRead
	 */
	public Block(BufferedReader bRead){

	}

	/**
	 * 
	 * @param loc
	 */
	public Direction atEdge(Location loc){
		return null;
	}

	/**
	 * 
	 * @param loc
	 */
	public ExtendedEntity getExtendedEntityAtThisLocation(Location loc){
		return null;
	}

	/**
	 * 
	 * @param dir
	 */
	public SortedSet<Interval> getIntervalSet(Direction dir){
		return null;
	}

	public Coordinate getMaxCoordinates(){
		return null;
	}

	/**
	 * Az aktuális blokk visszatér a paraméterként megadott irányban lévő
	 * szomszédjával.
	 * 
	 * @param dir
	 */
	public Block getNeighbour(Direction dir){
		return null;
	}

	/**
	 * átadunk egy blokkot, és hogy melyik oldalán található a MOSTANI blokknak az
	 * akivel passzoltatni akarjuk
	 * 
	 * @param whichSide
	 */
	public boolean isMatches(Direction whichSide){
		return false;
	}

	public boolean isEmpty(){
		return false;
	}

	/**
	 * 
	 * @param dir
	 */
	public void switchPlaces(Direction dir){

	}

	/**
	 * neighbours dir irányú referenciáját beállítjuk block-ra
	 * 
	 * @param dir
	 * @param block
	 */
	private void setNeighbour(Direction dir, Block block){

	}

	/**
	 * 2 függvényhívás találhat benne blablabla
	 * 
	 * @param dir
	 * @param block
	 */
	public void setBothNeighbours(Direction dir, Block block){

	}

	/**
	 * 
	 * @param block
	 */
	public Direction getDirectionOfThisNeighbour(Block block){
		return null;
	}

	public void countIntervalSets(){

	}

}